import os
from ftplib import FTP
from urllib.parse import urlencode
def handle_uploaded_file( request ):
    f = request.FILES['file']
    new_path = './' + f.name
    with open(new_path, 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)
    ftp_upload( request )

def ftp_upload( request ):

    file_name = request.FILES['file'].name
    file_path = './' + request.FILES['file'].name
    ftp_path = request.POST.get('ftp_path')
    ftp_path = ftp_path.replace("/"+file_name, "")

    ftp_url = request.POST.get('ftp_url')
    ftp_port = request.POST.get('ftp_port')
    ftp_user = request.POST.get('ftp_user')
    ftp_password = request.POST.get('ftp_password')
    ftp_info={
        'host': ftp_url if ftp_url else '10.18.221.124',
        'port': ftp_port if ftp_port else '21',
        'user': ftp_user if ftp_user else 'janusftp',
        'password': ftp_password if ftp_password else 'janusftp',
    }

    ftp = FTP()
    # 打开调试级别2, 显示详细信息
    ftp.set_debuglevel(2)
    # 服务器IP和端口
    ftp.connect(ftp_info['host'], 21)

    # 取消被动模式，不然失败 (海信用的是被动模式，似乎和阿里云相反)
    # ftp.set_pasv(False)

    # 匿名登陆, 如果需要登陆, 就把两个空字符串写上用户名和密码就行了("username", "password")
    ftp.login( ftp_info['user'], ftp_info['password'] )

    # 切换目录, 相对于ftp目录, 比如设置的ftp根目录为/vat/ftp, 那么pub就是/var/ftp下面的目录
    # ftp.cwd("/") #海信ftp 不要用根目录，否则报权限不够
    # ftp.cwd("janusgraph/")
    ftp.cwd( ftp_path )
    # 查看目录下有哪些文件, 如果文件名已经存在, 那么再次上传同一个文件就会报错, 返回列表
    # ftp.nlst("/pub")
    # 使用二进制的方式打开文件
    f = open(file_path, 'rb')

    # 上传文件, bufsize缓冲区大小
    # bufsize = 1024
    bufsize = os.path.getsize( file_path )

    result = ftp.storbinary("STOR " + file_name, f, bufsize )
    f.close()

    # 关闭调试模式
    ftp.set_debuglevel(0)

    # 退出FTP连接
    ftp.quit()
    os.remove(file_path)
